﻿/*
SINACOR - BMF&Bovespa
Arquivo: ConsultaAssessor.cs
Criado em: 31-mai-2010 14:40:15
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;


namespace Sinacor.UI.Bovespa.Movimento.Presenter 
{
    public class ConsultaAssessor : BasePresenter<IConsultaAssessor> 
	{
		#region Atributos
		private Communication.ConsultaAssessor _communicationConsultaAssessor;
		private Model.Parameter.FiltroConsultaAssessor _filtroConsultaAssessor;
		private ModelCollection<Model.Agente> _listaAgentes;
		private ModelCollection<Model.Assessor> _listaAssessores;
		private ModelCollection<Model.Correspondente> _listaCorrespondentes;
		private ModelCollection<Model.ConsultaAssessor> _listaMovimentoAssessores;
		#endregion

       #region Construtores

        public ConsultaAssessor(IConsultaAssessor view)
            : base(view)
        {
            _communicationConsultaAssessor = new Communication.ConsultaAssessor(this.Session);

            _filtroConsultaAssessor = new Model.Parameter.FiltroConsultaAssessor();
            _listaAgentes = new ModelCollection<Model.Agente>();
            _listaAssessores = new ModelCollection<Model.Assessor>();
            _listaCorrespondentes = new ModelCollection<Model.Correspondente>();
            _listaMovimentoAssessores = new ModelCollection<Model.ConsultaAssessor>();
        }

        #endregion

		#region Propriedades

		public Model.Parameter.FiltroConsultaAssessor FiltroConsultaAssessor
		{
			get { return _filtroConsultaAssessor; }
			set { _filtroConsultaAssessor = value; }
		}

		public ModelCollection<Model.Agente> ListaAgentes
		{
			get { return _listaAgentes; }
			set { _listaAgentes = value; }
		}

		public ModelCollection<Model.Assessor> ListaAssessores
		{
			get { return _listaAssessores; }
			set { _listaAssessores = value; }
		}

		public ModelCollection<Model.Correspondente> ListaCorrespondentes
		{
			get { return _listaCorrespondentes; }
			set { _listaCorrespondentes = value; }
		}

		public ModelCollection<Model.ConsultaAssessor> ListaMovimentoAssessores
		{
			get { return _listaMovimentoAssessores; }
			set { _listaMovimentoAssessores = value; }
		}

		#endregion

		#region Métodos Públicos

		public void ConsultarAgentes()
		{
            Model.Parameter.FiltroAgente filtro = null;

            try
            {
                if (_filtroConsultaAssessor.CodigoAssessor.HasValue)
                {
                    filtro = new Model.Parameter.FiltroAgente();
                    filtro.CodigoAssessor = _filtroConsultaAssessor.CodigoAssessor.Value;
                    _listaAgentes = _communicationConsultaAssessor.ConsultarAgentes(filtro);
                }
                else
                {
                    _listaAgentes = null;
                }
                
                View.AtualizarAgentes();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
		}

		public void ConsultarAssessores()
		{
            try
            {
                _listaAssessores = _communicationConsultaAssessor.ConsultarAssessores();
                View.AtualizarAssessores();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
		}

		public void ConsultarCorrespondentes()
		{
            try
            {
                _listaCorrespondentes = _communicationConsultaAssessor.ConsultarCorrespondentes();
                View.AtualizarCorrespondentes();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
		}

		public void ConsultarMovimentoAssessores()
		{
            try
            {
                _listaMovimentoAssessores = _communicationConsultaAssessor.ConsultarMovimentoAssessores(_filtroConsultaAssessor);

                if (_listaMovimentoAssessores == null
                    || _listaMovimentoAssessores.Count == 0)
                {
                    View.InformarPesquisaSemResultado();
                }

                View.AtualizarMovimentoAssessores();
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
		}

        public void Inicializar()
        {
            ConsultarAssessores();
            ConsultarAgentes();
            ConsultarCorrespondentes();
        }

		#endregion
	}
}